L2-041 插松枝
题目 L2-041 插松枝
思路分析
代码实现
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
using ll = long long;
using ull = unsigned long long;
using PII = pair<int, int>;
using Pll = pair<ll, ll>;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
const int inf = 0x3f3f3f3f;
queue<int> q;
stack<int> s;
int n, m, k;
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> m >> k;
while (n--) {
int x;
cin >> x;
q.push(x);
}
while (q.size() || s.size()) {
int cnt = 0, last = inf;
vector<int> curr_branch;
while (cnt < k) {
if (s.size() && s.top() <= last) {
curr_branch.push_back(s.top());
last = s.top();
s.pop();
cnt++;
} else if (q.size()) {
int t = q.front();
if (t <= last) {
curr_branch.push_back(t);
last = t;
q.pop();
cnt++;
} else if (s.size() < m) {
s.push(t);
q.pop();
} else {
break; // 小盒子已满,还不能用 → 结束当前枝
}
} else {
break; // 推送器空了
}
}
// 输出一根枝
for (int i = 0; i < curr_branch.size(); i++) {
if (i) cout << " ";
cout << curr_branch[i];
}
cout << endl;
}
return 0;
}
同类题型
视频讲解
⬅️ L2-040 哲哲打游戏 🏠 00-天梯赛 ➡️ L2-042 老板的作息表
💬 评论